FIG. 1 illustrates a host system 100 that includes an application 105, a kernel I/O manager 110, file systems 120, 122, and device drivers 130, 132, and illustrates multiple memory components 138 (shown as drive C: 134 and drive Y: 136). In operation, when the application 105 seeks access to file “Z”, the application sends a request to kernel I/O manager 110 for a handle to file “Z”. In response, the kernel I/O manager 110, acting as the interface between the application and memory devices, resolves the path to file “Z” in order to obtain the handle, and sends the handle to the application.
The arrows in FIG. 1 illustrate the logical path of communication amongst the different parts of the system, in which the application 105 sends the request to the kernel I/O manager 110, and in which the kernel I/O manager 110 resolves the path by examining the root directory 140, which includes information on the path to file “Z”.
As shown in FIG. 1, the system includes multiple memory devices, such as in the form of drive C: 134 and drive Y: 136. Applications, such as application 105, written above the operating system layer are typically unaware of optimized partitions that may be available for their use, and thus write files to predefined locations without regard to the properties of the location to which they are writing. For example, many operating systems define application-specific data directories, and applications will write all of their data to these directories. The use of temporary files is similarly defined in most operating systems, and applications will simply use filenames and locations defined by the operating system interface for this purpose. This may lead to suboptimal use of a multi-partition layout. Complicating this is the use of external storage, which may offer performance and capacity improvements.
However, the kernel file systems and the application stacks can be modified in order to manually select which partition or mount point should be used in each case, thereby enabling improved performance. For example, applications may explicitly address external storage, either by user configuration (i.e., the user selecting a directory to save files to) or through code in the application that detects and uses external storage.